﻿using System;
using System.Linq;
using System.Windows.Forms;
using BUL;

namespace EF04_Example
{
    public partial class NewsManagement : Form
    {
        News_Business bul = new News_Business();
        private int _id;
       
        public NewsManagement()
        {
            InitializeComponent();
        }
        // Sự kiện Form_Load: sự kiện xảy ra sau khi các điều khiển đã được tạo xong.
        private void NewsManagement_Load(object sender, EventArgs e)
        {
            // Gán title cho form
            Text = ClsConstant.Title;
            // Load Source cho ComboBox
            bul.LoadSourceGroupNews(cbNhomTin);
            // Load Tất cả Tin vào Gridview
            bul.LoadAllNews(dgvNews,txtName.Text);

            btnReset_Click(sender,e);
        }

        // Sự kiện Click vào Nút thêm mới.
        private void btnThemMoi_Click(object sender, EventArgs e)
        {
            //Validdate Data
            //(Nên Validate dữ liệu trước khi thực hiện Insert để tránh bị Exception)
            // Thực hiện thêm mới.
            bul.Insert_News(Convert.ToInt32(cbNhomTin.SelectedValue), txtName.Text, txtContent.Text, txtDetail.Text);
            // Tải lại dữ liệu để thấy tin vừa mới thêm vào.
            bul.LoadAllNews(dgvNews, txtName.Text);
        }

        // Sự kiện Click vào nút sửa.
        private void btnSua_Click(object sender, EventArgs e)
        {
            //Validdate Data
            //(Nên Validate dữ liệu trước khi thực hiện Update để tránh bị Exception)
            // Thực hiện cập nhật dữ liệu
            bul.Update_News(_id,Convert.ToInt32(cbNhomTin.SelectedValue), txtName.Text, txtContent.Text, txtDetail.Text);
            // Tải lại dữ liệu vừa cập nhật
            bul.LoadAllNews(dgvNews, txtName.Text);
        }
        // Sự kiện Click vào nút xóa.
        private void btnXoa_Click(object sender, EventArgs e)
        {
            // Thực hiện xóa.
            bul.Delete_News(_id);
            // Load lại dữ liệu.
            bul.LoadAllNews(dgvNews, txtName.Text);
        }
        // Sự kiện khi Click vào nút Reset.
        private void btnReset_Click(object sender, EventArgs e)
        {
            // Gán Text của TextBox về trắng.
            foreach (var control in groupBox1.Controls.OfType<TextBox>())
            {
                control.Text = "";
            }
            // Vô hiệu hóa nút Sửa và Xóa.
            ChangeModeToAddNew(true);
            // cho chuột nhảy vào ô textBox Name.
            txtName.Focus();
        }
        // Sự kiện khi người dùng Click vào một Cell trong một DataGridView
        private void DgvAdvertiseCellClick(object sender, DataGridViewCellEventArgs e)
        {
            // lấy hàng vừa chọn
            var indexRowSelected = e.RowIndex;
            // Nếu hàng chọn là Header(Tiêu đề cọt) thì Thoát.
            if (indexRowSelected <= -1) return;
            // Vô hiệu hóa nút AddNew và Cho phép Click ở nút Sửa và xóa.
            ChangeModeToAddNew(false);
            // Lưu giá trị Id để thực hiện cho việc Update và Delete.
            _id = Convert.ToInt32(dgvNews[1, indexRowSelected].Value);
            // Gán mã nhóm tin để lựa chọn đúng nhóm tin
            cbNhomTin.SelectedValue = Convert.ToInt32(dgvNews[2, indexRowSelected].Value);
            // gán lại giá trị cho các TextBox
            txtName.Text = dgvNews[4, indexRowSelected].Value.ToString();
            txtContent.Text = dgvNews[5, indexRowSelected].Value.ToString();
            txtDetail.Text = dgvNews[6, indexRowSelected].Value.ToString();
        }

        // Sự kiện khi người dùng nhập dữ liệu hoặc xóa vào TextBox Tìm kiếm.
        private void txtTimKiem_TextChanged(object sender, EventArgs e)
        {
            foreach (var control in groupBox1.Controls.OfType<TextBox>())
            {
                control.Text = "";
            }
            bul.LoadAllNews(dgvNews, txtTimKiem.Text);
        }

        // Phương thức thay đổi trạng thái vô hiệu các nút Add, Update, Delete.
        private void ChangeModeToAddNew(bool isAddNew)
        {
            btnThemMoi.Enabled = isAddNew;
            btnSua.Enabled = !isAddNew;
            btnXoa.Enabled = !isAddNew;
        }
    }
}
